package com.hnichr.ump.schedule.job;

import com.hnichr.ump.common.schedule.dto.RunResultDTO;
import com.hnichr.ump.common.schedule.entity.ScheduleDesk;

import java.util.Date;

public interface Job {
    /**
     * 获取调度名称，对应于定时任务控制台表中调度名称
     * @return
     */
    String getScheduleName();

    /**
     * 运行条件检查，返回true继续运行
     * @return
     */
    boolean runCheck(ScheduleDesk scheduleDesk);

    /**
     * 运行条件检查，各子类
     * @return
     */
    default boolean doRunCheck(ScheduleDesk scheduleDesk){
        return true;
    }

    /**
     * 执行逻辑
     * @return
     */
    void run();

    /**
     * 具体执行逻辑，各子类根据自身业务实现
     * @return
     */
    RunResultDTO doRun(ScheduleDesk scheduleDesk);

    /**
     * 获取下一次执行日期，如果doRun返回成功调用
     * @return
     */
    Date getNextScheduleTime(ScheduleDesk scheduleDesk);
}
